home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / umich / tex / td187src.lzh / DIALOGE.I < prev    next >
Text File  |  1991-12-14  |  45KB  |  1,323 lines

  1. IMPLEMENTATION MODULE Dialoge;
  2.  
  3. IMPORT CommonData;
  4. IMPORT mtAppl;
  5. IMPORT mtDials;
  6. IMPORT mtRsc;
  7. IMPORT mtAlerts;
  8. IMPORT MagicAES;
  9. IMPORT MagicVDI;
  10. IMPORT MagicConvert;
  11. IMPORT MagicStrings;
  12. IMPORT MagicSys;
  13. IMPORT VectorFont;
  14.  
  15. FROM SYSTEM          IMPORT ADDRESS , ADR ;
  16. FROM Types           IMPORT DrawObjectTyp, ObjectRecTyp, Block,
  17.                             sourceformat, targetformat,
  18.                             LatexSpecials,
  19.                             TextPosTyp, ObjectPtrTyp;
  20. FROM Variablen       IMPORT UnitToStr,
  21.                             FirstObject, LastObject,
  22.                             NewObject, DeleteObject,
  23.                             RefObject, Position,
  24.                             zoomfak,
  25.                             CoordToStr;
  26.  
  27. IMPORT GetFile;
  28. IMPORT RSCindices;
  29. IMPORT Diverses;
  30.  
  31. (**
  32. IMPORT RTD;
  33. **)
  34.  
  35. VAR  Tree    : POINTER TO ARRAY [0..200] OF MagicAES.OBJECT;
  36.  
  37. PROCEDURE OpenForm(form: mtDials.DIALOG);
  38. BEGIN
  39.   IF Diverses.DialCentered THEN
  40.     mtDials.DialCenter (form, mtDials.CSCREEN, 0, 0);
  41.    ELSE
  42.     mtDials.DialCenter (form, mtDials.CMOUSE, 0, 0);
  43.   END;
  44.   mtDials.DialForm (form, mtDials.DSTART);
  45.   mtDials.DialForm (form, mtDials.DGROW);
  46.   mtDials.DialDraw (form, 0, 999);
  47. END OpenForm;
  48.  
  49. PROCEDURE CloseForm(form: mtDials.DIALOG);
  50. BEGIN
  51.   mtDials.DialForm (form, mtDials.DSHRINK);
  52.   mtDials.DialForm (form, mtDials.DFINISH);
  53. END CloseForm;
  54.  
  55. PROCEDURE NormalizeForm(form: mtDials.DIALOG; index : INTEGER);
  56. BEGIN
  57.   IF index>0 THEN
  58.     mtDials.ExclState (form, index, MagicAES.SELECTED);
  59.   END;
  60. END NormalizeForm;
  61.  
  62. PROCEDURE DoForm (form: mtDials.DIALOG; start : INTEGER) : INTEGER;
  63. VAR i: INTEGER;
  64. BEGIN
  65.   OpenForm(form);
  66.   i:= mtDials.DialDo (form, start);
  67.   CloseForm(form);
  68.   NormalizeForm(form, i);
  69.   RETURN i;
  70. END DoForm;
  71.  
  72. PROCEDURE DrawDeskIcon(Icon : INTEGER);
  73. CONST DeskWin  = 0 ;
  74. VAR brec, bvis, bsect : Block;
  75.     tree : POINTER TO ARRAY [ 0..255 ] OF MagicAES.OBJECT ;
  76.  
  77. BEGIN
  78.   tree := MagicAES.RsrcGaddr( MagicAES.RTREE , RSCindices.desktop ) ;
  79.   MagicAES.ObjcOffset ( tree , Icon , brec.x , brec.y ) ;
  80.   brec.w := tree^ [ Icon ] .obWidth ;
  81.   brec.h := tree^ [ Icon ] .obHeight ;
  82.   (* Zuerst holen wir uns mal den sichtbaren Bereich *)
  83.   MagicAES.WindGet(DeskWin, MagicAES.WFFIRSTXYWH, bvis);
  84.   WHILE (bvis.w > 0) AND (bvis.h > 0) DO
  85.     IF Diverses.BlockIntersect(brec, bvis, bsect) THEN
  86.       MagicAES.ObjcDraw ( tree , 0 , 9 , bsect);
  87.     END ;
  88.     MagicAES.WindGet(DeskWin, MagicAES.WFNEXTXYWH, bvis);
  89.   END ;
  90. END DrawDeskIcon;
  91.  
  92. PROCEDURE DeselectIcon ( Icon : INTEGER ) ;
  93. VAR rec : RECORD x , y , w , h : INTEGER ; END;
  94.     tree : POINTER TO ARRAY [ 0..255 ] OF MagicAES.OBJECT ;
  95. BEGIN
  96.   IF Icon >= 0 THEN
  97.     tree := MagicAES.RsrcGaddr( MagicAES.RTREE , RSCindices.desktop ) ;
  98.     EXCL(tree^[Icon].obState, MagicAES.SELECTED);
  99.     MagicAES.ObjcOffset ( tree , Icon , rec.x , rec.y ) ;
  100.     DrawDeskIcon(Icon);
  101.   END;
  102. END DeselectIcon;
  103.  
  104. PROCEDURE SelectIcon ( Icon : INTEGER ) ;
  105.  
  106. VAR rec : RECORD x , y , w , h : INTEGER ; END;
  107.     tree : POINTER TO ARRAY [ 0..255 ] OF MagicAES.OBJECT ;
  108. BEGIN
  109.   IF Icon >= 0 THEN
  110.     tree := MagicAES.RsrcGaddr( MagicAES.RTREE , RSCindices.desktop ) ;
  111.     INCL(tree^[Icon].obState, MagicAES.SELECTED);
  112.     DrawDeskIcon(Icon);
  113.   END;
  114. END SelectIcon;
  115.  
  116. PROCEDURE GetBut(dial : mtDials.DIALOG; start, ende : INTEGER) : INTEGER;
  117. VAR ind    : INTEGER ;
  118. BEGIN
  119.   ind := start;
  120.   WHILE ind<=ende DO
  121.    (* Alle Radio-Buttons einer Ebene *)
  122.     IF mtDials.InFlag(dial, ind, MagicAES.RBUTTON) THEN
  123.       IF mtDials.InState(dial, ind, MagicAES.SELECTED) THEN
  124.         RETURN ind
  125.       END;
  126.     END;
  127.     INC(ind, 1);
  128.   END;
  129.   RETURN -1;
  130. END GetBut;
  131.  
  132. PROCEDURE SetBut(dial : mtDials.DIALOG; start, ende, set : INTEGER);
  133. VAR ind, old : INTEGER ;
  134. BEGIN
  135. (*
  136.   PDebug.ShowWord('SetBut from:', start);
  137.   PDebug.ShowWord('SetBut to  :', ende);
  138.   PDebug.ShowWord('SetBut set :', set);
  139. *)
  140.   old := GetBut(dial, start, ende);
  141.   (* Wir müssen erst einen eventuell vorhan- *)
  142.   (* denen Radio-Button zurücksetzen !       *)
  143.   FOR ind := start TO ende DO
  144.    (* Alle Radio-Buttons einer Ebene *)
  145.     IF mtDials.InFlag(dial, ind, MagicAES.RBUTTON) THEN
  146.       NormalizeForm(dial, ind);
  147.     END;
  148.   END;
  149.   IF (set>=0) OR (old<start) OR (old>ende) THEN
  150.     IF (ABS(set)>=start) AND (ABS(set)<=ende) THEN
  151.       IF mtDials.InFlag(dial, ABS(set), MagicAES.RBUTTON) THEN
  152.         mtDials.InclState(dial, ABS(set), MagicAES.SELECTED);
  153.       END;
  154.     END;
  155.    ELSE
  156.     IF mtDials.InFlag(dial, old, MagicAES.RBUTTON) THEN
  157.       mtDials.InclState(dial, old, MagicAES.SELECTED);
  158.     END;
  159.   END;
  160. END SetBut;
  161.  
  162. PROCEDURE BlankToZero(VAR text : ARRAY OF CHAR);
  163. VAR i : INTEGER;
  164. BEGIN
  165.   i := 0;
  166.   WHILE (text[i]=' ') DO
  167.     text[i] := '0';
  168.     INC(i);
  169.   END;
  170. END BlankToZero;
  171.  
  172. PROCEDURE GetUnitLength(VAR newfak, newunit : INTEGER;
  173.                         VAR zoom            : BOOLEAN) : BOOLEAN;
  174. (* Bestimme Einheit der Unitlength *)
  175. VAR but, i, j : INTEGER ;
  176.     k, l      : INTEGER ;
  177.     x, y, w, h: INTEGER ;
  178.     oldunit,
  179.     oldfak    : INTEGER ;
  180.     Dial      : mtDials.DIALOG;
  181.     res       : BOOLEAN;
  182.  
  183. BEGIN
  184.   (* Geht davon aus, daß die Buttons unmittelbar aufeinanderfolgen.
  185.      Also bitte beachten bei Änderung des RSC-Files !!!
  186.   *)
  187.   res := FALSE;
  188.   Tree  := mtRsc.GaddrRsc(RSC, MagicAES.RTREE , RSCindices.unitlen ) ;
  189.   IF mtDials.NewDial(Tree, Dial) THEN
  190.     oldunit := FirstObject^.Code[6] MOD 0100H;
  191.     oldfak  := FirstObject^.Code[6] DIV 0100H;
  192.     SetBut(Dial, RSCindices.mmunit, RSCindices.ppunit,
  193.            RSCindices.mmunit + oldunit);
  194.     CASE oldfak OF
  195.       0 : (* x 1     *) i := 2; |
  196.       1 : (* x 1/10  *) i := 1; |
  197.       2 : (* x 10    *) i := 3; |
  198.       3 : (* x 1/100 *) i := 0; |
  199.       4 : (* x 100   *) i := 4; |
  200.      ELSE
  201.       (* sollte nicht vorkommen *)
  202.       i := 2;
  203.     END;
  204.     SetBut(Dial, RSCindices.fak01100, RSCindices.fak10001,
  205.            RSCindices.fak01100 + i);
  206.     NormalizeForm (Dial, RSCindices.zyes);
  207.     but := DoForm ( Dial , -1 ) ;
  208.     IF but<>RSCindices.cancel THEN
  209.       res     := TRUE;
  210.       newunit := GetBut(Dial, RSCindices.mmunit, RSCindices.ppunit);
  211.       i       := GetBut(Dial, RSCindices.fak01100, RSCindices.fak10001);
  212.       zoom    := mtDials.InState(Dial, RSCindices.zyes, MagicAES.SELECTED);
  213.       IF newunit=-1 THEN
  214.         newunit := RSCindices.mmunit; (* Sicherheitshalber, falls was schiefgeht *)
  215.       END;
  216.       IF i=-1 THEN
  217.         i := RSCindices.fak01100 + 2; (* Sicherheitshalber, falls was schiefgeht *)
  218.       END;
  219.       i := i - RSCindices.fak01100;
  220.       CASE i OF
  221.         0 : (* x 1/100 *) newfak := 3; |
  222.         1 : (* x 1/10  *) newfak := 1; |
  223.         2 : (* x 1     *) newfak := 0; |
  224.         3 : (* x 10    *) newfak := 2; |
  225.         4 : (* x 100   *) newfak := 4; |
  226.        ELSE
  227.         (* sollte nicht vorkommen *)
  228.         newfak := 0;
  229.       END;
  230.       newunit := newunit - RSCindices.mmunit;
  231.     END;
  232.     mtDials.DisposeDial(Dial);
  233.   END;
  234.   RETURN res;
  235. END GetUnitLength;
  236.  
  237. PROCEDURE ChangeObjSize ( VAR xmal, ymal : LONGREAL );
  238. VAR Dial       : mtDials.DIALOG;
  239.     ok         : BOOLEAN;
  240.     x0, y0, w,
  241.     h, but     : INTEGER ;
  242.     xtxt, ytxt : ARRAY [0..127] OF CHAR;
  243.  
  244. BEGIN
  245.   Tree  := mtRsc.GaddrRsc(RSC, MagicAES.RTREE , RSCindices.skaliere ) ;
  246.   IF mtDials.NewDial(Tree, Dial) THEN
  247.     xtxt := '0100';
  248.     ytxt := '0100';
  249.     Tree^[RSCindices.xfactor].TedPtr^.tePtext  := ADR(xtxt);
  250.     Tree^[RSCindices.yfactor].TedPtr^.tePtext  := ADR(ytxt);
  251.     (* Eigentlich hätte ich erwartet, daß man die Textlänge 4 übergeben *)
  252.     (* muss, daß hat auch sonst funktioniert. Nur bei der MagicLib muß  *)
  253.     (* hier ein um 1 höherer Wert angegeben werden!! Eventueller Bug ?? *)
  254.     Tree^[RSCindices.xfactor].TedPtr^.teTxtlen := 5;
  255.     Tree^[RSCindices.yfactor].TedPtr^.teTxtlen := 5;
  256.     but := DoForm(Dial, RSCindices.xfactor);
  257.     mtDials.DisposeDial(Dial);
  258.     xmal := 0.0;
  259.     ymal := 0.0;
  260.     IF but=RSCindices.skweiter THEN
  261.       xmal := MagicConvert.StrToReal(xtxt);
  262.       ymal := MagicConvert.